#include<bits/stdc++.h>
using namespace std;
#define ll long long
 
int main(){
    int m,n;
    cin>>m,n;
    vector<vector<int>> arr(n,vector<int> (m));
    int cnt=1;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cin>>arr[i][j];
            if(arr[i][j]==1)cnt++;
        }
    }
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            //等于2是真草皮，3是假的草皮
            if(arr[i][j]!=0&&arr[i][j]!=3){
                if(j-1>=0)arr[i][j-1]=3;
                if(j+1<m)arr[i][j+1]=3;
                if(i-1>=0)arr[i-1][j]=3;
                if(i+1<n)arr[i+1][j]=3;
            }
        }
    }
 
    return 0;
}
// #include <iostream>
// #include <vector>
// #include <algorithm>
// using namespace std;

// const int MOD = 100000000;
// const int MAXN = 12;
// const int MAXS = 1 << MAXN;

// // 判断状态s是否合法（自身没有相邻的1）
// bool isValid(int s) {
//     return!(s & (s >> 1));
// }

// // 判断状态s1和s2是否冲突（没有相邻的1）
// bool isConflict(int s1, int s2) {
//     return!(s1 & s2);
// }

// int main() {
//     int m, n;
//     cin >> m >> n;
//     vector<vector<int>> land(m, vector<int>(n));
//     for (int i = 0; i < m; ++i) {
//         for (int j = 0; j < n; ++j) {
//             cin >> land[i][j];
//         }
//     }
//     vector<vector<int>> dp(m, vector<int>(MAXS, 0));
//     // 初始化第一行
//     for (int s = 0; s < (1 << n); ++s) {
//         if (isValid(s)) {
//             bool flag = true;
//             for (int j = 0; j < n; ++j) {
//                 if ((s >> j) & 1 && land[0][j] == 0) {
//                     flag = false;
//                     break;
//                 }
//             }
//             if (flag) {
//                 dp[0][s] = 1;
//             }
//         }
//     }
//     // 动态规划
//     for (int i = 1; i < m; ++i) {
//         for (int j = 0; j < (1 << n); ++j) {
//             if (!isValid(j)) continue;
//             bool flag = true;
//             for (int k = 0; k < n; ++k) {
//                 if ((j >> k) & 1 && land[i][k] == 0) {
//                     flag = false;
//                     break;
//                 }
//             }
//             if (!flag) continue;
//             for (int k = 0; k < (1 << n); ++k) {
//                 if (isValid(k) && isConflict(j, k)) {
//                     dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
//                 }
//             }
//         }
//     }
//     int ans = 0;
//     // 计算最后一行所有合法状态的方案数之和
//     for (int s = 0; s < (1 << n); ++s) {
//         ans = (ans + dp[m - 1][s]) % MOD;
//     }
//     cout << ans << endl;
//     return 0;
// }